﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using Disk_Pizza_Admin.produto;
using System.IO;
using Disk_Pizza_Admin.dao;
using System.Data.SqlClient;

namespace Disk_Pizza_Admin
{
    public partial class frmVenda : Form
    {
        public frmVenda()
        {
            InitializeComponent();
            this.printDocument1.PrintPage += new System.Drawing.Printing.
            PrintPageEventHandler(this.printDocument1_PrintPage);
        }
        protected void printDocument1_PrintPage(object sender,
System.Drawing.Printing.PrintPageEventArgs ev)
        {
            float linesPerPage = 0;
            float yPosition = 0;
            int count = 0;
            float leftMargin = ev.MarginBounds.Left;
            float topMargin = ev.MarginBounds.Top;
            string line = null;
            Font printFont = this.lstMudancas.Font;
            SolidBrush myBrush = new SolidBrush(Color.Black);

            // Work out the number of lines per page, using the MarginBounds.
            linesPerPage =
               ev.MarginBounds.Height / printFont.GetHeight(ev.Graphics);

            // Iterate over the string using the StringReader, printing each line.
            while (count < linesPerPage && ((line = myReader.ReadLine()) != null))
            {
                // calculate the next line position based on
                // the height of the font according to the printing device
                yPosition = topMargin + (count * printFont.GetHeight(ev.Graphics));

                // draw the next line in the rich edit control

                ev.Graphics.DrawString(line, printFont,
                                       myBrush, leftMargin,
                                       yPosition, new StringFormat());
                count++;
            }

            // If there are more lines, print another page.
            if (line != null)
                ev.HasMorePages = true;
            else
                ev.HasMorePages = false;

            myBrush.Dispose();
        }


        private StringReader myReader;
        OleDbConnection conexao;
        OleDbDataAdapter adapter;
        DataSet ds;
        OleDbCommand comando;
        private delegate void adicionaItemNaListaHandler(string strVal);

        List<ProdutoDTO> pedidoFinal = new List<ProdutoDTO>();
        public double finalTotal = 0;
        public double finalDesconto = 0;
        public DateTime dataPedido;


        private void frmVenda_Load(object sender, EventArgs e)
        {

            double preco = 0.00;
            txtDesconto.Text = preco.ToString("F").PadLeft(txtDesconto.Mask.Length);
            txtQuantidade.Text = "001";
            txtTotal.Text = preco.ToString("F").PadLeft(txtDesconto.Mask.Length);
            txtDesconto.Text = preco.ToString("F").PadLeft(txtDesconto.Mask.Length);

            txtSubTotal.Text = preco.ToString("F").PadLeft(txtDesconto.Mask.Length);

            preencheComboEntregadores();
            txtDataLanc.Enabled = false;

        }

        private void preencheComboEntregadores()
        {
            banco banco = new banco();
            string con = banco.pegarConexao();
            conexao = new OleDbConnection(con);
            
            string sql = "";
            sql = sql + "    SELECT        nome ";
            sql = sql + "    FROM            tblCliente";

            comando = new OleDbCommand();
            comando.Connection = conexao;
            comando.CommandText = sql;
            try
            {
                conexao.Open();
                comando.CommandType = CommandType.Text;
                OleDbDataReader reader = comando.ExecuteReader();


                if (reader.HasRows)
                {
                    while (reader.Read())
                    {
                        txtEntregador.Items.Add(reader["nome"].ToString());
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("falha ao carregar entregadores, " + ex.Message.ToString());
            }


        }

        private void cancelarVendaEscToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();

        }

        private void frmVenda_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode.ToString() == "Escape")
            {
                this.Close();
            }

        }

        private void btnVerificaTel_Click(object sender, EventArgs e)
        {
            buscaTelefone();
        }

        private void buscaTelefone()
        {
            if (txtTelefone.Text.Replace("-", "").Trim().Equals(""))
            {
                MessageBox.Show("Insira o numero de telefone do cliente");
            }
            else
            {
                
                //Verifica se o cliente já existe
                if (checaClienteExiste(txtTelefone.Text))
                {
                    //Carrega Dados do Cliente
                    gbxDadosCliente.Visible = true;
                    carregaHistoricoCliente();
                }
                else
                {
                    //Inicializa form de cadastro
                    frmCliente frm = new frmCliente(this, "i");
                    frm.ShowDialog();
                }
            }
        }

        private void carregaHistoricoCliente()
        {
            banco banco = new banco();
            string con = banco.pegarConexao();
            conexao = new OleDbConnection(con);


            string sql = "";
            sql = sql + "   Select pr.Produto,ip.Qtde, p.DataPedido ";
            sql = sql + "   from tblPedido p, tblItemPedido ip , tblProduto pr, tblCliente c";
            sql = sql + "   where p.codigo = ip.CodigoPedido";
            sql = sql + "   and pr.Código = ip.CodigoProduto ";
            sql = sql + "   and c.codigo = p.CodigoCliente";
            sql = sql + "   and c.codigo = "+Convert.ToInt32(lblCodigoCliente.Text.Trim())+"";
            sql = sql + "    ORDER BY p.DataPedido desc";

            adapter = new OleDbDataAdapter(sql, conexao);
            ds = new DataSet();
            adapter.Fill(ds, "tblCliente");

            gridUltimosPedidos.DataSource = ds.Tables["tblCliente"];

        }

        public bool checaClienteExiste(string p)
        {
            banco banco = new banco();
            string con = banco.pegarConexao();
            conexao = new OleDbConnection(con);
            
            string sql = "";
            sql = sql + "    SELECT        *";
            sql = sql + "    FROM            tblCliente";
            sql = sql + "    WHERE  ";
            sql = sql + "   (TELEFONE LIKE '" + p + "' or TELEFONE2 LIKE '" + p + "')";

            comando = new OleDbCommand();
            comando.Connection = conexao;
            comando.CommandText = sql;
            try
            {
                conexao.Open();
                comando.CommandType = CommandType.Text;
                OleDbDataReader reader = comando.ExecuteReader();
                if (reader.HasRows)
                {
                    //Preenche os dados e retorna true
                    reader.Read();
                    lblNomeCliente.Text = reader["nome"].ToString();
                    lblCodigoCliente.Text = reader["codigo"].ToString();
                    string endereco = reader["endereco"].ToString();
                    endereco = endereco + ", " + reader["numero"].ToString();
                    endereco = endereco + " " +reader["complemento"].ToString();
                    endereco = endereco + ", " + reader["bairro"].ToString();
                    endereco = endereco + ", " + reader["municipio"].ToString();
                    endereco = endereco + " - " + reader["uf"].ToString();
                    txtEndereco.Text = endereco;
                    txtReferencia.Text = reader["referencia"].ToString();
                    if (txtReferencia.Text.Trim().Equals(""))
                    {
                        txtReferencia.Text = "Sem Ponto de Referência Cadastrado";
                    }
                    txtObservacaoCliente.Text = reader["obs"].ToString();

                    return true;

                }
                else
                {
                    return false;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Erro ao fazer a operação! " + ex.Message.ToString());
                return false;
            }
            finally
            {
                conexao.Close();
            }
        }

        private void timerHora_Tick(object sender, EventArgs e)
        {
            lblHora.Text = DateTime.Now.ToLongTimeString();
        }

        private void btnEditar_Click(object sender, EventArgs e)
        {
            frmCliente frm = new frmCliente(this, "a");
            frm.ShowDialog();
        }

        private void txtTelefone_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)System.Windows.Forms.Keys.Enter)
            {
                buscaTelefone();
            }
        }

        private void btnBuscarProduto_Click(object sender, EventArgs e)
        {
            if (!(lblCodigoCliente.Text.Trim().Equals("")))
            {
                frmPopPupProduto frm = new frmPopPupProduto(this);
                frm.ShowDialog();
            }
            else
            {
                MessageBox.Show("Selecione primeiro o cliente para depois selecionar os produtos");
            }
        }

        private void txtCodigoProduto_Leave(object sender, EventArgs e)
        {
            if (!((txtCodigoProduto.Text.Trim().Equals(""))))
            {
                preencheValoresProduto();               

            }
        }

        public void preencheValoresProduto()
        {
            errorProvider1.Clear();
            if (!(lblCodigoCliente.Text.Trim().Equals("")))
            {

                banco banco = new banco();
                string con = banco.pegarConexao();
                conexao = new OleDbConnection(con);
                
                try
                {
                    string sql = "";
                    sql = sql + "    SELECT código, produto, preco, situacao ";
                    sql = sql + "    FROM            tblProduto";
                    sql = sql + "    WHERE código like '" + Convert.ToInt32(txtCodigoProduto.Text) + "' and situacao like 'ATIVO' ";

                    comando = new OleDbCommand();
                    comando.Connection = conexao;
                    comando.CommandText = sql;

                    conexao.Open();
                    comando.CommandType = CommandType.Text;
                    OleDbDataReader reader = comando.ExecuteReader();
                    if (reader.HasRows)
                    {
                        //Preenche os dados e retorna true
                        reader.Read();
                        txtProduto.Text = reader["produto"].ToString();
                        txtValor.Text = reader["preco"].ToString();

                        //seta qtde default
                        txtQuantidade.Text = "1";

                        //calcula subtotal padrao
                        calculaSubTotal();
                    }
                    else
                    {
                        errorProvider1.SetError(txtCodigoProduto, "O Código não foi encontrado, verifique se o produto ainda está ativo ou existe. Utilize a lupa para localizar produtos ativos");
                        LimparCampos();
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Código inválido! Caso não saiba o código do produto, utilize o botão de pesquisar.");
                }
                finally
                {
                    conexao.Close();
                }
            }
            else
            {
                MessageBox.Show("Selecione primeiro o cliente para iniciar o pedido");
                txtCodigoProduto.Text = "";
            }
        }

        private void txtCodigoProduto_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)System.Windows.Forms.Keys.Enter)
            {                
                txtQuantidade.Focus();
            }
        }

        private void txtQuantidade_Leave(object sender, EventArgs e)
        {
            if (verificaQtdValida())
            {
                calculaSubTotal();
            }
            else
            {
                MessageBox.Show("Insira uma quantidade válida");
            }
        }

        private bool verificaQtdValida()
        {
            try
            {
                int a = Convert.ToInt32(txtQuantidade.Text) + 1;
                if (a == 1)
                {
                    txtQuantidade.Text = "1";
                    return false;
                    
                }
                else
                {
                    return true;
                }
            }
            catch
            {
                txtQuantidade.Text = "1";
                return false;
            }
        }

        private void calculaSubTotal()
        {
            try
            {
                if (!(txtValor.Text.Replace("R$", "").Trim().ToString().Equals("")))
                {

                    double desconto = 0;
                    if (!(txtDesconto.Text.Replace("R$", "").Replace(",", "").Trim().ToString().Equals("")))
                    {
                        desconto = Convert.ToDouble(txtDesconto.Text.Replace("R$", ""));

                    }

                    int quantidade = 0;
                    if (!(txtQuantidade.Text.Trim().ToString().Equals("")))
                    {
                        quantidade = Convert.ToInt32(txtQuantidade.Text);
                    }

                    if (quantidade == 0)
                    {
                        txtSubTotal.Text = "0";
                    }
                    else
                    {
                        //Prepara os valor para double
                        double valor = Convert.ToDouble(txtValor.Text.Replace("R$", ""));

                        //calcula
                        double preco = (valor * quantidade) - desconto;

                        //incrementa
                        txtSubTotal.Text = preco.ToString("F").PadLeft(txtDesconto.Mask.Length);
                    }
                }
            }
            catch (Exception ex)
            {
                ex.Message.ToString();
                MessageBox.Show("Falha ao realizar a operação, verifique se existem valores errados");
            }
        }

        private void txtQuantidade_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)System.Windows.Forms.Keys.Enter)
            {
                btnAdiconarPedido.Focus();
            }
        }

        private void txtDesconto_Leave(object sender, EventArgs e)
        {
            calculaSubTotal();
        }

        private void txtDesconto_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)System.Windows.Forms.Keys.Enter)
            {
                btnAdiconarPedido.Focus();
            }
        }

        private void btnAdiconarPedido_Click(object sender, EventArgs e)
        {
            if (!(txtProduto.Text.Trim().ToString().Equals("")))
            {
                adiconaItemPedido();
            }
        }


        private void adicionaItemNaLista(string strVal)
        {

            if (lstMudancas.InvokeRequired)

                lstMudancas.Invoke(new adicionaItemNaListaHandler(adicionaItemNaLista), new object[] { strVal });

            else

                lstMudancas.SelectedIndex = lstMudancas.Items.Add(strVal);

            Application.DoEvents();

        }

        private void adiconaItemPedido()
        {
            //coloca o painel com os dados dos itens (CUPOM FISCAL)
            btnFinalizarPedido.Enabled = true;

            ProdutoDTO dto = new ProdutoDTO();
            List<string> produtoFormatado = new List<string>();
            produtoFormatado = formataProduto(txtProduto.Text);
            List<string> obsFormatada = new List<string>();
            obsFormatada = formataObs(txtObs.Text);

            if (lstMudancas.Items.Count > 0)
            {
                adicionaItemNaLista(txtCodigoProduto.Text);

                foreach (string p in produtoFormatado)
                {
                    adicionaItemNaLista(p);
                }

                string espaco = adicionaespacoPreco();
                string espacodesc = adicionarEspacoDesconto();
                string espacoqtd = adicionarEspacoQtd();
                adicionaItemNaLista("         " + txtQuantidade.Text.Trim() + espacoqtd + txtValor.Text.Trim() + espaco + txtDesconto.Text.Trim() + espacodesc + txtSubTotal.Text.Trim().Replace("R$", "").Replace(" ", ""));
                //Coloca a obs formatada do produto na nota
                foreach (string p in obsFormatada)
                {
                    adicionaItemNaLista(p);
                }
            
            }
            else
            {
                adicionaItemNaLista("                 PIZZARIA  EXEMPLO");
                adicionaItemNaLista("                  TEL.: 2467-7657");
                adicionaItemNaLista("                 RECIBO DE ENTREGA");
                adicionaItemNaLista("Pedido realizado em : " + DateTime.Now.ToString());
                adicionaItemNaLista("Dados Cliente: " + lblNomeCliente.Text + "    ");
                string endereco = checaTamEndereco(txtEndereco.Text);
                adicionaItemNaLista(endereco);
                string referencia = checaTamEndereco(txtReferencia.Text);
                adicionaItemNaLista(referencia);
                adicionaItemNaLista("------------------------------------------------");
                adicionaItemNaLista("cod. produto");
                adicionaItemNaLista("produto desc");
                adicionaItemNaLista("         qtd.     preço  desc          sub-total");
                adicionaItemNaLista(txtCodigoProduto.Text);

                foreach (string p in produtoFormatado)
                {
                    adicionaItemNaLista(p);
                }
                
                string espaco = adicionaespacoPreco();
                string espacodesc = adicionarEspacoDesconto();
                string espacoqtd = adicionarEspacoQtd();
                adicionaItemNaLista("         " + txtQuantidade.Text.Trim() + espacoqtd + txtValor.Text.Trim() + espaco + txtDesconto.Text.Trim() + espacodesc + txtSubTotal.Text.Trim().Replace("R$", "").Replace(" ", ""));
                
                //Coloca a obs formatada do produto na nota
                foreach (string p in obsFormatada)
                {
                    adicionaItemNaLista(p);
                }

            }

            //Incrementa o valor Total
            double aux = Convert.ToDouble(txtSubTotal.Text.Replace("R$", ""));
            finalTotal = aux + finalTotal;
            txtTotal.Text = finalTotal.ToString("F").PadLeft(txtDesconto.Mask.Length);

            //Incrementa o valor do desconto Total
            aux = 0;
            aux = Convert.ToDouble(txtDesconto.Text);
            finalDesconto = aux + finalDesconto;
            txtTotalDesconto.Text = finalDesconto.ToString("F").PadLeft(txtDesconto.Mask.Length);

            //Valores do Item do Pedido
            dto.CodigoProduto = Convert.ToInt32(txtCodigoProduto.Text);
            dto.Desconto = Convert.ToDouble(txtDesconto.Text);
            dto.Qtde = Convert.ToInt32(txtQuantidade.Text);
            dto.ValorTotal = Convert.ToDouble(txtSubTotal.Text.Replace("R$", ""));
            dto.Obs = txtObs.Text;

            pedidoFinal.Add(dto);


            LimparCampos();
        }

        private List<string> formataProduto(string p)
        {
            //retorna o produto formatado quebrando linha
            int tamanhoColuna = 48;
            int tamanhoProduto = txtProduto.Text.Trim().Length;
            List<string> retorno = new List<string>();

            int resultado = tamanhoColuna - tamanhoProduto;
            if (resultado > 0) //se isso, entao pode retornar apenas uma linha
            {
                retorno.Add(p);
            }
            else
            {
                string a = p.Substring(0, 47);
                string b = p.Substring(47);
                retorno.Add(a);
                retorno.Add(b);
            }
            return retorno;
        }

        private List<string> formataObs(string p)
        {
            //retorna o produto formatado quebrando linha
            int tamanhoColuna = 48;
            int tamanhoProduto = txtObs.Text.Trim().Length;
            List<string> retorno = new List<string>();
            List<string> retornoAux = new List<string>();

            int resultado = tamanhoColuna - tamanhoProduto;
            if (resultado > 0) //se isso, entao pode retornar apenas uma linha
            {
                retorno.Add(p);
            }
            else
            {
                string a = p.Substring(0, 47);
                string b = p.Substring(47);
                string c = "";
                string d = "";

                if (b.Length > 47)
                {
                    c = b.Substring(47);
                    b = b.Substring(0, 47);

                    if (c.Length > 47)
                    {
                        d = c.Substring(47);
                        c = c.Substring(0, 47);
                    }
                }
                retornoAux.Add(a);
                retornoAux.Add(b);
                retornoAux.Add(c);
                retornoAux.Add(d);
                foreach (string r in retornoAux)
                {
                    if (!(a.Trim().Equals("")))
                    {
                        retorno.Add(r);
                    }
                }
                
                
            }
            return retorno;
        }

        private string checaTamEndereco(string p)
        {
            string ret = "";
            if (p.Trim().Length > 48)
            {
                ret = p.Substring(0, 47);
            }
            else
            {
                ret = p;
            }
            return ret;
        }

        private string adicionarEspacoQtd()
        {
            int tamanhoDesc = txtQuantidade.Text.Trim().Length;
            string retorno = "";
            int qtdEspaco = 9 - tamanhoDesc;

            for (int i = 0; i < qtdEspaco; i++)
            {
                retorno = retorno + " ";
            }
            return retorno;
        }

        private string adicionarEspacoDesconto()
        {
            int tamanhoDesc = txtDesconto.Text.Trim().Length;
            string retorno = "";
            int qtdEspaco = 15 - tamanhoDesc;

            for (int i = 0; i < qtdEspaco; i++)
            {
                retorno = retorno + " ";
            }
            return retorno;
        }

        private string adicionaespacoPreco()
        {
            int tamanhoPreco = txtValor.Text.Trim().Length;
            string retorno = "";
            int qtdEspaco = 7 - tamanhoPreco;

            for (int i = 0; i < qtdEspaco; i++)
            {
                retorno = retorno + " ";
            }
            return retorno;
        }

        private void LimparCampos()
        {

            txtCodigoProduto.Text = "";
            txtProduto.Text = "";

            double preco = 0.00;
            txtDesconto.Text = preco.ToString("F").PadLeft(txtDesconto.Mask.Length);
            txtQuantidade.Text = "001";
            txtDesconto.Text = preco.ToString("F").PadLeft(txtDesconto.Mask.Length);
            txtSubTotal.Text = preco.ToString("F").PadLeft(txtDesconto.Mask.Length);
            txtValor.Text = preco.ToString("F").PadLeft(txtDesconto.Mask.Length);
        }

        private void executaQuery(string consulta)
        {
            banco banco = new banco();
            string con = banco.pegarConexao();
            conexao = new OleDbConnection(con);
            
            string sql = consulta;

            comando = new OleDbCommand();
            comando.Connection = conexao;
            comando.CommandText = sql;
            try
            {
                conexao.Open();
                comando.ExecuteNonQuery();
                //ds.AcceptChanges();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Erro ao fazer a operação! " + ex.Message.ToString());
            }
            finally
            {
                conexao.Close();
            }
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            //DINHEIRO
            //CHEQUE
            //DÉBITO
            //CRÉDITO VISA
            //CRÉDITO MASTERCARD
            //OUTRO
            if (txtFormaPagamento.Text.Equals("DINHEIRO"))
            {
                chkTroco.Visible = true;
                txtDataLanc.Text = DateTime.Now.ToString();
                txtDataLanc.Enabled = false;

            }
            else
            {
                chkTroco.Visible = false;
                txtTrocoFinal.Text = "";
                txtTroco.Text = "";
                txtDataLanc.Enabled = true;
            }
            //else if (txtFormaPagamento.Text.Equals(""))
            //{

            //}
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            if (chkTroco.Checked)
            {
                gbxTroco.Visible = true;
            }
            else
            {
                gbxTroco.Visible = false;
            }
        }

        private void maskedTextBox1_Leave(object sender, EventArgs e)
        {
            caluclaTroco();
        }

        private void caluclaTroco()
        {
            try
            {
                double total = Convert.ToDouble(txtTotal.Text.Replace("R$", ""));
                double troco = Convert.ToDouble(txtTroco.Text);
                double trocofinal = troco - total;

                txtTrocoFinal.Text = trocofinal.ToString("F").PadLeft(txtDesconto.Mask.Length);
            }
            catch (Exception ex)
            {
                ex.Message.ToString();
            }


        }

        private void btnFinalizarPedido_Click(object sender, EventArgs e)
        {
            if (txtEntregador.Text.Trim().Equals(""))
            {
                MessageBox.Show("Selecione um Entregador para Finalizar o Pedido");
            }
            else
            {
                //Dados do Pedido
                try
                {
                    dataPedido = DateTime.Now;
                    //Criar um novo pedido no banco
                    PedidoDTO pedido = new PedidoDTO();
                    pedido.CodigoCliente = Convert.ToInt32(lblCodigoCliente.Text);
                    pedido.TipoLanc = txtFormaPagamento.Text.Trim();
                    pedido.DataVenda = dataPedido;
                    pedido.DataPedido = dataPedido;
                    pedido.Situacao = "PEDIDO ATIVO";
                    pedido.DataLanc = Convert.ToDateTime(txtDataLanc.Text.Trim());
                    pedido.CodigoEntregador = txtEntregador.Text.Trim();


                    //objeto completo, salvar no banco o PEDIDO  
                    string sql = "";
                    sql = sql + "   INSERT INTO tblPedido";
                    sql = sql + "   (CodigoCliente";
                    sql = sql + "   ,DataPedido";
                    sql = sql + "   ,Situacao";
                    sql = sql + "   ,TipoLanc";
                    sql = sql + "   ,DataLanc";
                    sql = sql + "   ,CodigoEntregador";
                    sql = sql + "   ,DataVenda)	   ";
                    sql = sql + "    VALUES";
                    sql = sql + "   ( '" + pedido.CodigoCliente + "' ";
                    sql = sql + "    ,'" + pedido.DataPedido + "'";
                    sql = sql + "    ,'" + pedido.Situacao + "'";
                    sql = sql + "    ,'" + pedido.TipoLanc + "' ";
                    sql = sql + "    ,'" + pedido.DataLanc + "'";
                    sql = sql + "    ,'" + pedido.CodigoEntregador + "'";
                    sql = sql + "    ,'" + pedido.DataVenda + "')";
                    executaQuery(sql);


                    int codigo_pedigo = pegaCodigoPedido();

                    //pra cada item de pedido, salve no banco de item de pedido.
                    foreach (ProdutoDTO itemPedido in pedidoFinal)
                    {
                        sql = "";
                        sql = sql + "   INSERT INTO tblItemPedido";
                        sql = sql + "   (CodigoProduto";
                        sql = sql + "   ,CodigoPedido";
                        sql = sql + "   ,Desconto";
                        sql = sql + "   ,Qtde";
                        sql = sql + "   ,Obs";
                        sql = sql + "   ,ValorTotal)";
                        sql = sql + "    VALUES";
                        sql = sql + "   ( '" + itemPedido.CodigoProduto + "' ";
                        sql = sql + "    ,'" + codigo_pedigo + "'";
                        sql = sql + "    ,'" + itemPedido.Desconto + "' ";
                        sql = sql + "    ,'" + itemPedido.Qtde + "'";
                        sql = sql + "    ,'" + itemPedido.Obs + "'";
                        sql = sql + "    ,'" + itemPedido.ValorTotal + "')";
                        executaQuery(sql);
                    }
                    //Imprime na nota o valor total
                    adicionaItemNaLista("------------------------------------------------");
                    adicionaItemNaLista("Forma de Pagamento: " + pedido.TipoLanc + "");
                    if (chkTroco.Checked)
                    {
                        if (!(txtTroco.Text.Trim().Equals("")))
                        {
                            adicionaItemNaLista("Troco para   : R$ " + txtTroco.Text.Trim());
                            adicionaItemNaLista("Troco        : R$ " + txtTrocoFinal.Text.Trim());
                        }
                    }
                    adicionaItemNaLista("------------------------------------------------");
                    adicionaItemNaLista("Tot. Pedido  : R$ " + txtTotal.Text.Replace("R$", "").Trim());

                    LimparCampos();
                    if (MessageBox.Show("Venda Finalizada com sucesso. Deseja imprimir o cupom da venda?", "atenção", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        //Imprimi o listBox, desabilita o botão de finalizar pedido e habilita o botão de nova venda
                        InativaTela();
                        imprimirListBox();
                    }
                    else
                    {
                        //desabilita o botao de finalizar pedido e habilita o btn de nova venda.
                        InativaTela();
                    }
                    menCancVenda.Text = "Voltar (ESC)";
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Erro ao cadastrar o pedido, entre em contato com o desenvolvedor: " + ex.Message.ToString());

                }
            }

        }

        private void InativaTela()
        {
            btnAdiconarPedido.Visible = false;
            btnFinalizarPedido.Visible = false;
            gbxMain.Enabled = false;
            btnImprimir.Visible = true;
            btnVerificaTel.Enabled = false;
            txtTelefone.Enabled = false;
        }
        private void imprimirListBox()
        {
            printDialog1.Document = printDocument1;
            string strText = "";
            foreach (object x in lstMudancas.Items)
            {
                strText = strText + x.ToString() + "\n";
            }

            myReader = new StringReader(strText);
            if (printDialog1.ShowDialog() == DialogResult.OK)
            {
                this.printDocument1.Print();
            }
        }

        private int pegaCodigoPedido()
        {
            banco banco = new banco();
            string con = banco.pegarConexao();
            conexao = new OleDbConnection(con);
            
            try
            {
                string sql = "";
                sql = sql + " Select Codigo from tblPedido where DataVenda like '"+ dataPedido +"' ";

                comando = new OleDbCommand();
                comando.Connection = conexao;
                comando.CommandText = sql;

                conexao.Open();
                comando.CommandType = CommandType.Text;
                OleDbDataReader reader = comando.ExecuteReader();
                if (reader.HasRows)
                {
                    //Preenche os dados e retorna true
                    reader.Read();
                    int retorno = Convert.ToInt32(reader["codigo"].ToString());
                    //seta qtde default
                    return retorno;
                }
                else
                {
                    return 0;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Falha ao tentar buscar o pedido criado no banco de dados. Contate o desenvolvedor. " + ex.Message.ToString());
                return 0;
            }
            finally
            {
                conexao.Close();
            }
        }

        private int pegaCodigoEntregador()
        {
            //DESENVOLVIMENTO PENDENTE
            return 1;
        }

        private void btnImprimir_Click(object sender, EventArgs e)
        {
            imprimirListBox();
        }

        private void txtTroco_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)System.Windows.Forms.Keys.Enter)
            {
                caluclaTroco();
            }

        }



        private void txtTelefone_Click(object sender, EventArgs e)
        {
            //
        }

        private void txtTelefone_TextChanged(object sender, EventArgs e)
        {
            if (txtTelefone.Text.Length == 9)
            {
                txtTelefone.ForeColor = Color.Black;
                btnVerificaTel.ForeColor = Color.Black;
            }
            else
            {
                txtTelefone.ForeColor = Color.Gray;
                btnVerificaTel.ForeColor = Color.LightGray;
            }
        }

    }
}
